package top.cookieAndSession;


import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;

/**
 *    会话跟踪:
 *      一种维护浏览器状态的方法，服务器需要识别多次请求是否来自于同一浏览器，以便在同一次会话的多次请求间共享数据
 *
 *    Cookie是存储在浏览器端而Session是存储在服务器端
 *
 *    ------------------------Cookie---------------------------
 *
 *    Cookie：客户端会话技术，将数据保存到客户端，以后每次请求都携带Cookie数据进行访问
 *
 *    发送Cookie：
 *      Cookie cookie = new Cookie("key","value")     创建Cookie对象，并设置数据
 *
 *      response.addCookie(cookie)                    发送Cookie到客户端：使用response对象
 *
 *    获取Cookie：
 *      Cookie[] cookies = request.getCookies()     获取客户端携带的所有Cookie，使用request对象
 *
 *      cookie.getName()                            遍历数组，获取每一个Cookie对象：for
 *      cookie.getValue()                           使用Cookie对象方法获取数据
 *
 *    对于Cookie的实现原理是基于HTTP协议的,其中设计到HTTP协议中的两个请求头信息:
 *      响应头:    set-cookie
 *      请求头:    cookie
 *
 *    -------------------------Cookie的存活时间---------------------------
 *
 *    默认情况下，Cookie存储在浏览器内存中，当浏览器关闭，内存释放，则Cookie被销毁
 *
 *    setMaxAge(int seconds)        设置Cookie存活时间
 *
 *    正数：将Cookie写入浏览器所在电脑的硬盘，持久化存储。到时间自动删除
 *    负数：默认值，Cookie在当前浏览器内存中，当浏览器关闭，则Cookie被销毁
 *    零：删除对应Cookie
 *
 *    -------------------------Cookie存储中文---------------------------
 *
 *    Cookie不能直接存储中文
 *
 *    需要存储中文，就需要进行URL转码
 */
@WebServlet("/cookie1")
public class Cookie1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                            throws ServletException, IOException {
        //创建Cookie
        String value = "张三";

        //对中文转码
        value = URLEncoder.encode(value, "utf-8");
        System.out.println("value：" + value);

        Cookie cookie = new Cookie("username",value);

        //设置Cookie存活时间  一天
        cookie.setMaxAge(24 * 60 * 60);

        //发送Cookie
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                                            throws ServletException, IOException {
        doGet(req,resp);
    }
}
